using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ConversionTools._ToRaster
{
    /// <summary>
    /// <para>Multipatch to Raster</para>
    /// <para>Converts multipatch features to a raster dataset.</para>
    /// <para>将多面体要素转换为栅格数据集。</para>
    /// </summary>    
    [DisplayName("Multipatch to Raster")]
    public class MultipatchToRaster : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public MultipatchToRaster()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_multipatch_features">
        /// <para>Input multipatch features</para>
        /// <para>The input multipatch features to be converted to a raster.</para>
        /// <para>要转换为栅格的输入多面体要素。</para>
        /// </param>
        /// <param name="_out_raster">
        /// <para>Output raster</para>
        /// <para><xdoc>
        ///   <para>The output raster dataset to be created.</para>
        ///   <para>It will be of floating point type.</para>
        ///   <para>If the output raster will not be saved to a geodatabase, specify .tif for TIFF file format, .CRF for CRF file format, .img for ERDAS IMAGINE file format, or no extension for Esri Grid raster format.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要创建的输出栅格数据集。</para>
        ///   <para>它将是浮点型的。</para>
        ///   <para>如果输出栅格不会保存到地理数据库中，请为 TIFF 文件格式指定 .tif 。CRF 表示 CRF 文件格式，.img 表示 ERDAS IMAGINE 文件格式，或者 Esri Grid 栅格格式没有扩展名。</para>
        /// </xdoc></para>
        /// </param>
        public MultipatchToRaster(object _in_multipatch_features, object _out_raster)
        {
            this._in_multipatch_features = _in_multipatch_features;
            this._out_raster = _out_raster;
        }
        public override string ToolboxName => "Conversion Tools";

        public override string ToolName => "Multipatch to Raster";

        public override string CallName => "conversion.MultipatchToRaster";

        public override List<string> AcceptEnvironments => ["autoCommit", "cellSize", "cellSizeProjectionMethod", "configKeyword", "extent", "geographicTransformations", "nodata", "outputCoordinateSystem", "parallelProcessingFactor", "resamplingMethod", "scratchWorkspace", "snapRaster", "tileSize", "workspace"];

        public override object[] ParameterInfo => [_in_multipatch_features, _out_raster, _cell_size];

        /// <summary>
        /// <para>Input multipatch features</para>
        /// <para>The input multipatch features to be converted to a raster.</para>
        /// <para>要转换为栅格的输入多面体要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input multipatch features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_multipatch_features { get; set; }


        /// <summary>
        /// <para>Output raster</para>
        /// <para><xdoc>
        ///   <para>The output raster dataset to be created.</para>
        ///   <para>It will be of floating point type.</para>
        ///   <para>If the output raster will not be saved to a geodatabase, specify .tif for TIFF file format, .CRF for CRF file format, .img for ERDAS IMAGINE file format, or no extension for Esri Grid raster format.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要创建的输出栅格数据集。</para>
        ///   <para>它将是浮点型的。</para>
        ///   <para>如果输出栅格不会保存到地理数据库中，请为 TIFF 文件格式指定 .tif 。CRF 表示 CRF 文件格式，.img 表示 ERDAS IMAGINE 文件格式，或者 Esri Grid 栅格格式没有扩展名。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_raster { get; set; }


        /// <summary>
        /// <para>Output cell size</para>
        /// <para><xdoc>
        ///   <para>The cell size of the output raster being created.</para>
        ///   <para>This parameter can be defined by a numeric value or obtained from an existing raster dataset. If the cell size hasn’t been explicitly specified as the parameter value, the environment cell size value is used, if specified; otherwise, additional rules are used to calculate it from the other inputs. See Usages for more detail.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>正在创建的输出栅格的像元大小。</para>
        ///   <para>此参数可以由数值定义，也可以从现有栅格数据集中获取。如果尚未显式指定像元大小作为参数值，则使用环境像元大小值（如果已指定）;否则，将使用其他规则从其他输入中计算它。有关详细信息，请参阅用法。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output cell size")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _cell_size { get; set; } = null;


        public MultipatchToRaster SetEnv(int? autoCommit = null, object cellSize = null, object configKeyword = null, object extent = null, object geographicTransformations = null, object nodata = null, object outputCoordinateSystem = null, object parallelProcessingFactor = null, object resamplingMethod = null, object scratchWorkspace = null, object snapRaster = null, double[] tileSize = null, object workspace = null)
        {
            base.SetEnv(autoCommit: autoCommit, cellSize: cellSize, configKeyword: configKeyword, extent: extent, geographicTransformations: geographicTransformations, nodata: nodata, outputCoordinateSystem: outputCoordinateSystem, parallelProcessingFactor: parallelProcessingFactor, resamplingMethod: resamplingMethod, scratchWorkspace: scratchWorkspace, snapRaster: snapRaster, tileSize: tileSize, workspace: workspace);
            return this;
        }

    }

}